package com.ex.config;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * <h1>shiro中拦截的请求处理</h1>
 *
 * @author longdeng
 * @Date 2019/10/8 0:40
 */
public class ShiroUrlMap {

    /**
     * shiro拦截请求集合
     */
    public static Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();


    static {
        swaggerAnon();
        webAnon();
        cacheAnon();
        auth();
    }


    /**
     * swagger非拦截请求信息
     */
    public static void swaggerAnon() {
        filterChainDefinitionMap.put("/static/**", "anon");
        // 配置不会拦截注册页面
        filterChainDefinitionMap.put("/js/**", "anon");
        //放行Swagger2页面
        filterChainDefinitionMap.put("/swagger-ui.html", "anon");
        filterChainDefinitionMap.put("/swagger/**", "anon");
        filterChainDefinitionMap.put("/webjars/**", "anon");
        filterChainDefinitionMap.put("/swagger-resources/**", "anon");
        filterChainDefinitionMap.put("/v2/**", "anon");
    }

    /**
     * web环境下非拦截请求
     */
    public static void webAnon() {
        filterChainDefinitionMap.put("/api/account/register", "anon");

        filterChainDefinitionMap.put("/api/account/login", "anon");
        filterChainDefinitionMap.put("/static/**", "anon");
    }

    /**
     * 缓存测试接口非拦截请求
     */
    public static void cacheAnon() {
        filterChainDefinitionMap.put("/api/cache/cache", "anon");
        filterChainDefinitionMap.put("/api/cache/put", "anon");
        filterChainDefinitionMap.put("/api/cache/evict", "anon");
    }

    /**
     * 添加测试需要认证的接口信息
     */
    public static void testApiAuthc() {
        filterChainDefinitionMap.put("/api/account/test", "authc");
    }

    /**
     * 需要认证的请求
     */
    public static void auth() {
        //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
        filterChainDefinitionMap.put("/logout", "logout");
        //<!-- 过滤链定义，从上向下顺序执行，一般将/**放在最为下边 -->:这是一个坑呢，一不小心代码就不好使了;
        //<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
        filterChainDefinitionMap.put("/**", "authc");
    }


}
